using System.Text.RegularExpressions;

namespace CSharpPro._0930;

public class User
{
    private Dictionary<string, string> userCredentials = new Dictionary<string, string>();

    public void Show()
    {
        
        while (true)
        {
            Console.WriteLine("主菜单：");
            Console.WriteLine("1. 登录");
            Console.WriteLine("2. 注册");
            Console.WriteLine("3. 退出");
            Console.Write("请选择功能（输入数字）：");

            string choice = Console.ReadLine();
            if (string.IsNullOrWhiteSpace(choice))
            {
                Console.WriteLine("不可为空，请输入有效数字。");
                continue;
            }

            int menuChoice;
            if (!int.TryParse(choice, out menuChoice))
            {
                Console.WriteLine("请输入有效数字。");
                continue;
            }

            switch (menuChoice)
            {
                case 1:
                    Login();
                    break;
                case 2:
                    Regist();
                    break;
                case 3:
                    Console.WriteLine("退出程序。");
                    return;
                default:
                    Console.WriteLine("请输入有效数字（1-3）。");
                    break;
            }
        }
    }

    public void Login()
    {
        Console.WriteLine("=== 登录 ===");
        Console.Write("用户名：");
        string username = Console.ReadLine();
        if (string.IsNullOrWhiteSpace(username))
        {
            Console.WriteLine("用户名不可为空。");
            return;
        }

        Console.Write("密码：");
        string password = Console.ReadLine();
        if (string.IsNullOrWhiteSpace(password))
        {
            Console.WriteLine("密码不可为空。");
            return;
        }

        if (userCredentials.ContainsKey(username) && userCredentials[username] == password)
        {
            Console.WriteLine("登录成功！进入系统首页（模拟）。");
        }
        else
        {
            Console.WriteLine("登录失败，用户名不存在或密码错误。");
        } 
    }

    public void Regist()
    {
        Console.WriteLine("=== 注册 ===");
        Console.Write("用户名（3-15 个字符，只能包含字母、数字、下划线）：");
        string username = Console.ReadLine();

        if (string.IsNullOrWhiteSpace(username))
        {
            Console.WriteLine("用户名不可为空。");
            return;
        }

        if (username.Length < 3 || username.Length > 15)
        {
            Console.WriteLine("用户名长度必须为 3-15 个字符。");
            return;
        }

        if (!Regex.IsMatch(username, @"^[a-zA-Z0-9_]+$"))
        {
            Console.WriteLine("用户名只能包含字母、数字、下划线。");
            return;
        }

        if (userCredentials.ContainsKey(username))
        {
            Console.WriteLine("用户名已存在。");
            return;
        }

        Console.Write("密码（6-20 个字符，必须包含至少 1 个大写字母、1 个小写字母和 1 个数字）：");
        string password = Console.ReadLine();
        if (string.IsNullOrWhiteSpace(password))
        {
            Console.WriteLine("密码不可为空。");
            return;
        }

        if (password.Length < 6 || password.Length > 20)
        {
            Console.WriteLine("密码长度必须为 6-20 个字符。");
            return;
        }

        if (!Regex.IsMatch(password, @"^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).+$"))
        {
            Console.WriteLine("密码必须包含至少 1 个大写字母、1 个小写字母和 1 个数字。");
            return;
        }

        Console.Write("确认密码：");
        string confirmPassword = Console.ReadLine();
        if (string.IsNullOrWhiteSpace(confirmPassword))
        {
            Console.WriteLine("确认密码不可为空。");
            return;
        }

        if (password != confirmPassword)
        {
            Console.WriteLine("密码与确认密码不一致。");
            return;
        }

        userCredentials.Add(username, password);
        Console.WriteLine("注册成功！");
    }
}
    
    
